﻿using System;
using BrainTechLLC;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Collections;

using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Net.Sockets;

namespace Mud.EmlenMudMain
{
  public delegate string CommandDelegate(CharacterData ch, string presetFirstArgument, string szUserArguments);
  public enum SerializationTypes
  {
    Binary = 0,
    Soap = 1,
    XML = 2
  }

  public interface ICommand  
  {    
    CommandDelegate Commandfunction { get; set; }
    string Commandstring { get; set; }
    string Descr { get; set; }
    int Level { get; set; }
    LogType Logtype { get; set; }
    int NShortcut { get; set; }
    string PerformCommand(CharacterData ch, string presetFirstArgument, string szUserArguments);
    string PerformCommand(CharacterData ch, string presetFirstArgument, string szUserArguments, int nOverrideLevel, CharPosition positionOverride);
    CharPosition Position { get; set; }
    string PresetFirstArgument { get; set; }
  }

  //public interface IPersistentWorldData
  //{
  //  AreaData CreateNewArea(int nApproximateRoomVnums, string szAreaName, string szFileName, int nOpen);
  //  bool SerializeAreaOut(AreaData area, int outVersion);
  //  AreaData SerializeAreaIn(string szFileName, int inVersion);
  //  System.Collections.ArrayList AllAreas { get; set; }
  //  System.Collections.ArrayList AllClans { get; set; }
  //  IGuildList AllGuilds { get; set; }
  //  System.Collections.ArrayList AllHelpTopics { get; set; }
  //  System.Collections.Generic.Dictionary<int, MobPrototype> AllMobPrototypes { get; set; }
  //  System.Collections.ArrayList AllNotes { get; set; }
  //  System.Collections.Generic.Dictionary<int, ObjectPrototype> AllObjPrototypes { get; set; }
  //  System.Collections.ArrayList AllPlayerbaseData { get; set; }
  //  System.Collections.ArrayList AllRaces { get; set; }
  //  System.Collections.ArrayList AllSects { get; set; }
  //  System.Collections.ArrayList AllShops { get; set; }
  //  System.Collections.ArrayList AllSocials { get; set; }
  //  IAreaList arealist { get; set; }
  //  TimeSpan arenaTimelimit { get; set; }
  //  System.Collections.Hashtable ban_list { get; set; }
  //  void bansite(string sz);
  //  System.Collections.ArrayList channels { get; set; }
  //  AreaData FindArea(string szFN);
  //  //AreaData FindArea(string cn);
  //  RoomData GetRoom(int vnum);
  //  System.Collections.Generic.Dictionary<int, System.Collections.Generic.List<ICommand>> htCommandListsByFirstTwoLetters { get; set; }
  //  System.Collections.Generic.Dictionary<string, ICommand> htCommands { get; set; }
  //  System.Collections.Hashtable htPlayerbase { get; set; }
  //  System.Collections.Hashtable htQuestsByName { get; set; }
  //  System.Collections.Generic.Dictionary<int, RoomData> htRooms { get; set; }
  //  System.Collections.Hashtable htSocialsByName { get; set; }
  //  System.Collections.Hashtable htSpellListByGSN { get; set; }
  //  System.Collections.Hashtable htSpellListByName { get; set; }
  //  void InsertBasicSkills();
  //  ILimitedItemsData LimitedItems { get; set; }
  //  int nAreaCount { get; set; }
  //  void nbansite(string sz);
  //  System.Collections.Hashtable nMobPopCount { get; set; }
  //  int nMobPrototypes { get; set; }
  //  int nObjectPrototypes { get; set; }
  //  int nRoomsOpen { get; set; }
  //  int nSpellCount { get; set; }
  //  int open_areas { get; set; }
  //  IPowerData pow { get; set; }
  //  IRatingData ratings { get; set; }
  //  void read_score();
  //  void read_sh_score();
  //  System.Collections.Generic.List<ICommand> rgCommands { get; set; }
  //  System.Collections.ArrayList rgObjRandPopInfo { get; set; }
  //  System.Collections.ArrayList rgPlayerbase { get; set; }
  //  System.Collections.ArrayList SpellList { get; set; }
  //  int top_room_vnum { get; set; }
  //  int top_vnum_mob_prototype { get; set; }
  //  int top_vnum_obj_prototype { get; set; }
  //  ITopTenData topten { get; set; }
  //}
}
